/*
 * JVM_OpcodeConvert.c
 *
 *  Created on: 04.01.2011
 *      Author: Tavin
 */


#include <stdint.h>

#include "JVM_StatusCodes.h"

#include "JVM_Opcode.h"
#include "JVM_OpcodeConvert.h"

/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_i2l									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_i2l()
{
	int32_t myValue;
	int64_t myValue2;
	myValue=JVM_Opcode_popIntValue();
	myValue2=myValue;
	JVM_Opcode_pushLongValue(myValue);
	return(STCD_OK);
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_i2f									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_i2f()
{
	float myFloat;
	myFloat=JVM_Opcode_popIntValue();
	JVM_Opcode_pushFloatValue(myFloat);

	return(STCD_OK);
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_i2d									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_i2d()
{
	double myDouble;

	myDouble=JVM_Opcode_popIntValue();
	JVM_Opcode_pushDoubleValue(myDouble);

	return(STCD_OK);
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_l2i									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_l2i()
{
	return(STCD_OK);
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_l2f									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_l2f()
{
	float myFloat;

	myFloat=JVM_Opcode_popIntValue();
	JVM_Opcode_pushFloatValue(myFloat);

	return(STCD_OK);
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_l2d									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_l2d()
{
	double myDouble;

	myDouble=JVM_Opcode_popLongValue();
	JVM_Opcode_pushDoubleValue(myDouble);

	return(STCD_OK);
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_f2i									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_f2i()
{
	uint32_t myInt;

	myInt=JVM_Opcode_popFloatValue();
	JVM_Opcode_pushIntValue(myInt);

	return(STCD_OK);

}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_f2l									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_f2l()
{
	uint64_t myLong;

	myLong=JVM_Opcode_popFloatValue();
	JVM_Opcode_pushLongValue(myLong);

	return(STCD_OK);

}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_f2d									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_f2d()
{
	return(STCD_OK);
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_d2i									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_d2i()
{
	uint32_t myInt;

	myInt=JVM_Opcode_popDoubleValue();
	JVM_Opcode_pushLongValue(myInt);

	return(STCD_OK);

}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_d2l									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_d2l()
{
	uint64_t myLong;

	myLong=JVM_Opcode_popDoubleValue();
	JVM_Opcode_pushLongValue(myLong);

	return(STCD_OK);

}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_d2f									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_d2f()
{
	float myValue;

	myValue=JVM_Opcode_popDoubleValue();
	JVM_Opcode_pushFloatValue(myValue);
	return(STCD_OK);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_i2b									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_i2b()
{
	int32_t myValue;

	myValue=JVM_Opcode_popIntValue();
	myValue&=0xff;

	if ((myValue& (1<<7))>0)
			{
			myValue|=0xffffff00;
			}

	JVM_Opcode_pushIntValue(myValue);

	return(STCD_OK);
}
/*
 * uint16_t JVM_cmd_i2b()
{
	int32_t myIntValue;
	int8_t myByteValue

	myIntValue=JVM_Opcode_popIntValue();

	myByteValue=myIntValue;

	JVM_Opcode_pushIntValue(myValue);

	return(STCD_OK);
}
 */
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_i2c									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_i2c()
{
	int32_t myValue;

	myValue=JVM_Opcode_popIntValue();
	myValue&=0xffff;


	JVM_Opcode_pushIntValue(myValue);

	return(STCD_OK);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_i2s									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.4			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_i2s()
{
	int32_t myValue;

	myValue=JVM_Opcode_popIntValue();
	myValue&=0xffff;

	if ((myValue& (1<<15))>0)
			{
			myValue|=0xffff0000;
			}

	JVM_Opcode_pushIntValue(myValue);

	return(STCD_OK);
}

